home *** CD-ROM | disk | FTP | other *** search
- #include "tcdll.h"
-
- // タイマー用構造体
- typedef struct _tagTimerStruct
- {
- char name[80];
- UINT id;
- int minute;
- int second;
- } TIMERSTRUCT;
- typedef TIMERSTRUCT* PTIMERSTRUCT;
-
- extern HWND hwndTClockMain;
- extern HMENU hMenu;
-
- PTIMERSTRUCT pTS = NULL;
- int nTimer = 0;
-
- /*------------------------------------------------
- タイマー開始
- --------------------------------------------------*/
- void StartTimer(UINT idTimer)
- {
- char subkey[20];
- PTIMERSTRUCT pTStemp;
- int i, count;
- UINT id;
-
- count = GetMyRegLong("", "TimerNum", 0);
- for(i = 0; i < count; i++)
- {
- wsprintf(subkey, "Timer%d", i + 1);
- id = GetMyRegLong(subkey, "ID", 0);
- if(id == idTimer) break;
- }
- if(i == count) return;
-
- pTStemp = (PTIMERSTRUCT)GlobalAllocPtr(GHND,
- sizeof(TIMERSTRUCT) * (nTimer + 1));
- if(pTS && nTimer > 0)
- {
- int i;
- for(i = 0; i < nTimer; i++)
- pTStemp[i + 1] = pTS[i];
- GlobalFreePtr(pTS);
- }
- nTimer++;
- pTS = pTStemp;
-
- GetMyRegStr(subkey, "Name", pTS[0].name, "");
- pTS[0].id = id;
- pTS[0].minute = GetMyRegLong(subkey, "Minute", 10);
- pTS[0].second = 0;
-
- if(hMenu) DestroyMenu(hMenu); hMenu = NULL;
- }
-
- /*------------------------------------------------
- タイマー中止
- --------------------------------------------------*/
- void StopTimer(int n)
- {
- PTIMERSTRUCT pTStemp;
- int i;
-
- if(!pTS) return;
- pTStemp = NULL;
- if(nTimer > 1)
- {
- pTStemp = (PTIMERSTRUCT)GlobalAllocPtr(GHND,
- sizeof(TIMERSTRUCT) * (nTimer - 1));
- for(i = 0; i < n; i++)
- pTStemp[i] = pTS[i];
- for(i = n; i < nTimer - 1; i++)
- pTStemp[i] = pTS[i + 1];
- }
- GlobalFreePtr(pTS);
- nTimer--;
- pTS = pTStemp;
-
- if(hMenu) DestroyMenu(hMenu); hMenu = NULL;
- }
-
- /*------------------------------------------------
- 終了処理
- --------------------------------------------------*/
- void ClearTimer(void)
- {
- if(pTS) GlobalFreePtr(pTS); pTS = NULL;
- nTimer = 0;
- }
-
- /*------------------------------------------------
- メニューにタイマー一覧を追加
- --------------------------------------------------*/
- void AppendTimerMenu(HMENU hm)
- {
- int i;
-
- if(!pTS) return;
- for(i = 0; i < nTimer; i++)
- AppendMenu(hm, MF_STRING , 110+i, " ");
- }
-
- /*------------------------------------------------
- メニューのタイマーに文字列を設定
- --------------------------------------------------*/
- void SetTimerMenu(HMENU hm)
- {
- char s[100];
- int i, m;
- SYSTEMTIME t;
-
- if(pTS == NULL) return;
- GetLocalTime(&t);
- for(i = 0; i < nTimer; i++)
- {
- wsprintf(s, " %s %02d:%02d",
- pTS[i].name, pTS[i].minute, pTS[i].second);
- ModifyMenu(hm, 110+i, MF_STRING|MF_BYCOMMAND, 110+i, s);
- }
- }
-
- /*------------------------------------------------
- タイマー実行
- --------------------------------------------------*/
- void DoTimer(int minute, int second)
- {
- int i, s;
-
- if(!pTS) return;
- for(i = 0; i < nTimer; i++)
- {
- if(pTS[i].second == 0)
- {
- pTS[i].minute--;
- pTS[i].second = 59;
- }
- else pTS[i].second--;
-
- if(pTS[i].minute <= 0 && pTS[i].second <= 0)
- {
- PostMessage(hwndTClockMain, WM_USER+7, 0, pTS[i].id);
- StopTimer(i);
- i--;
- }
- }
- }
-